
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>垃圾回收机制</title>
</head>
<body>
    

    <script>
        // 垃圾回收机制  GC  浏览器默认的一种机制，使用js的时候，进行内存的分配，当不使用时候，会进行垃圾回收机制进行内存的回收。
//         什么是垃圾：一般来说没有被引用的对象就是垃圾，就是要被清除， 有个例外如果几个对象引用形成一个环，互相引用，
        // 但根访问不到它们，这几个对象也是垃圾，也要被清除。

         // 方法：
        // 	①JS具有垃圾自动回收的机制：周期性执行，找出那些不在继续使用的变量，然后释放其内存。
            
        // 	②标记清除(常见)：当变量进入环境时，将这个变量标记为“进入环境”。当变量离开环境时，则将其标记为“离开环境”。
        // 	  标记“离开环境”的就回收内存。垃圾回收器完成内存清除工作，销毁那些带标记的值并回收他们所占用的内存空间。
            
        // 	③引用计数：     
        // 		原理：跟踪记录每个值被引用的次数。     
        // 		工作流程：当声明了一个变量并将一个引用类型值赋给该变量时，则这个值的引用次数就是1。
        // 		如果同一个值又被赋给另一个变量，则该值的引用次数加1。相反，如果包含对这个值引用的变量又取得了另外一个值，
        // 		则这个值的引用次数减1。当这个值的引用次数变成0时，则说明没有办法再访问这个值了，因而就可以将其占用的
        // 		内存空间回收回来。这样，当垃圾回收器下次再运行时，它就会释放那些引用次数为0的值所占用的内存。
           

        // 浏览器会为变量分配内存  垃圾回收机制
        const  age = 18;

        // 浏览器会为对象分配内存  垃圾回收机制
        const obj = {
                name: "jack"
        }

         // 浏览器会为函数分配内存  垃圾回收机制
         function fn() {
            const age = 19;
            console.log(age);
            
        }

        fn()

         // 内存驻留（内存泄漏）
        function init() {
            setInterval(() => {
                console.log("hello")
            }, 3000);
        }

        init()



    </script>
</body>
</html>